/*
 * 汎用的なイベントを追加していってください
 */
var followEvent = function() {
	var followBtn = $(this);
	var unit = $(this).parent().parent();
	var params = {
		user_id : unit.attr("user-id")
	};
	followBtn.attr("disabled", "");	//一時的に使えないようにする
	api.createFriendship(params, function(data) {
		followBtn.removeAttr("disabled");
		followBtn.attr("class","unfollow-button");
		followBtn.text("フォロー解除");
		followBtn.unbind('click', followEvent);
		followBtn.click(unfollowEvent);
	});
}

var unfollowEvent = function() {
	var unfollowBtn = $(this);
	var unit = $(this).parent().parent();
	var params = {
		user_id : unit.attr("user-id")
	};
	unfollowBtn.attr("disabled", "");	//一時的に使えないようにする
	api.destroyFriendship(params, function(data) {
		unfollowBtn.removeAttr("disabled");
		unfollowBtn.attr("class","unfollow-button");
		unfollowBtn.text("フォローする");
		unfollowBtn.unbind('click', unfollowEvent);
		unfollowBtn.click(followEvent);
	});
}

//リツイート関連にイベント
var retweetEvent = function(){
	var rtBtn = $(this);
	var unit = getTweetUnitByChild(rtBtn);
	rtBtn.attr("disabled", "");	//一時的に使えないようにする
	$.mobile.showPageLoadingMsg();
	//unitごとにtimeline-idつまりstatus_idを持っている
	api.retweetStatuses(unit.attr("timeline-id"), function(data){
		$.mobile.hidePageLoadingMsg();
		rtBtn.removeAttr("disabled");
		if(data.retweeted_status != undefined){
			gUser.rtIds[data.retweeted_status.id_str] = data.id_str;
			twiMsg.show(data.retweeted_status.text + "をリツイートしました");
			rtBtn.attr("timeline-id", data.id_str);
			rtBtn.attr("class", "unrt");
			rtBtn.text("リツイートの解除");
			rtBtn.unbind('click', retweetEvent);
			rtBtn.click(unretweetEvent);
		}
	});
}
var unretweetEvent = function(){
	var unrtBtn = $(this);
	var unit = getTweetUnitByChild(unrtBtn);
	unrtBtn.attr("disabled", "");	//一時的に使えないようにする
	$.mobile.showPageLoadingMsg();
	//リツイートしたものを連想配列で持ってる
	if( gUser.rtIds[unit.attr("timeline-id")] != undefined){
		var tergetId = gUser.rtIds[unit.attr("timeline-id")];
		api.destroyStatuses(tergetId, function(data){
			$.mobile.hidePageLoadingMsg();
			unrtBtn.removeAttr("disabled");
			if(data.retweeted_status.text != undefined){
				twiMsg.show(data.retweeted_status.text + "のリツイートを取消しました");
				unrtBtn.attr("class", "rt");
				unrtBtn.text("リツイート");
				unrtBtn.unbind('click', unretweetEvent);
				unrtBtn.click(retweetEvent);
			}
		});
	}else{
		$.mobile.hidePageLoadingMsg();
		twiMsg.show("ツイートを特定できませんでした");
	}
}

//お気に入り関連のイベント
var favEvent = function(){
	var favBtn = $(this);
	var unit = getTweetUnitByChild(favBtn);
	favBtn.attr("disabled", "");	//一時的に使えないようにする
	$.mobile.showPageLoadingMsg();
	//お気に入りへ追加
	api.createFavorites(unit.attr("timeline-id"), function(data){
		$.mobile.hidePageLoadingMsg();
		favBtn.removeAttr("disabled");
		if(data.text != undefined){
			twiMsg.show(data.text + "をお気に入りに追加しました");
			favBtn.attr("class", "unfav");
			favBtn.text("お気に入りから削除");
			favBtn.unbind('click', favEvent);
			favBtn.click(unfavEvent);
		}else{
			twiMsg.show("お気に入りに追加に失敗しました");
		}
	});
}

var unfavEvent = function(){
	var unfavBtn = $(this);
	var unit = getTweetUnitByChild(unfavBtn);
	unfavBtn.attr("disabled", "");	//一時的に使えないようにする
	$.mobile.showPageLoadingMsg();
	//お気に入りから削除
	api.destroyFavorites(unit.attr("timeline-id"), function(data){
		$.mobile.hidePageLoadingMsg();
		unfavBtn.removeAttr("disabled");
		if(data.text != undefined){
			twiMsg.show(data.text + "をお気に入りから削除しました");
			unfavBtn.attr("class","fav");
			unfavBtn.text("お気に入りへ追加");
			unfavBtn.unbind('click', unfavEvent);
			unfavBtn.click(favEvent);
		}else{
			twiMsg.show("エラーでお気に入りから削除に失敗しました");
		}
	});
}

//リスト関連のイベント
var addListEvent = function(){};
var removeListEvent = function(){};

//var gParam;
var accountShowEvent = function(){
	//排他制御、アクティブページだったら戻る
	var pageId = $($.mobile.activePage).attr('id');
	if(pageId == "account-page"){
		return;
	}
	if($(this).attr("user-id") != null){
		var params = {user_id : $(this).attr("user-id")};
		//console.log($(this).attr("user-id"));
		gParam = WEB_ROOT + "users/index/#account-page?user_id=" + $(this).attr("user-id");
		$('#account').empty();
		$('#account_tweet').empty();
		$('#three_button').hide();
		$('#three_tweet').empty();
		if(bChangedPage == false){
			bChangedPage = true;
			$.mobile.changePage("#account-page?user_id=" + $(this).attr("user-id") ,{changeHash:true});
		}
	}
	else if($(this).attr("screen_name") != null){
		var params = {screen_name : $(this).attr("screen_name")};
		//console.log($(this).attr("user-id"));
		gParam = WEB_ROOT + "users/index/#account-page?screen_name=" + $(this).attr("screen_name");
		$('#account').empty();
		$('#account_tweet').empty();
		$('#three_button').hide();
		$('#three_tweet').empty();
		if(bChangedPage == false){
			bChangedPage = true;
			$.mobile.changePage("#account-page?screen_name=" + $(this).attr("screen_name") ,{changeHash:true});
		}		
	}
	$(this).removeClass("ui-btn-active");
}

var tweetShowEvent = function(){
	//排他制御、アクティブページだったら戻る
	var pageId = $($.mobile.activePage).attr('id');
	if(pageId == "status-page"){
		return;
	}
	
	console.log($(this).parent().parent().attr("timeline-id"));
	if($(this).parent().parent().attr("timeline-id") != null){
		var params = {timeline_id : $(this).parent().parent().attr("timeline-id")};
		gParam = WEB_ROOT + "users/index/#status-page?timeline_id=" + $(this).parent().parent().attr("timeline-id");
		$('#status').empty();
		//排他制御、何度もページ変更するのを防ぐ
		if(bChangedPage == false){
			bChangedPage = true;
			$.mobile.changePage("#status-page?timeline_id" + $(this).parent().parent().attr("timeline-id") , {changeHash:true});
		}
	}
}


var updateEvent = function() {
	//現在アクティブなページを取得
	var pageId = $($.mobile.activePage).attr('id');
	var params = {
		count : 20
	};
	switch(pageId) {
		case 'tweet-page':
			$.mobile.showPageLoadingMsg();
			api.getHomeTimeline(params, function(data) {
				$.mobile.hidePageLoadingMsg();
				updateTweets(timeline, data);
			});
			break;
		case 'reply-page':
			$.mobile.showPageLoadingMsg();
			api.getMentions(params, function(data) {
				$.mobile.hidePageLoadingMsg();
				updateTweets(replies, data);
			});
			break;
		default:
			if($('#' + pageId).html() != null && pageId.match(/list-.+-page/)) {
				updateList(pageId);
			}
			break;
	}
}

//お気に入り関連のイベント
var statusFavEvent = function(){
	var favLink = $(this);
	if(favLink.attr("disabled") != undefined || favLink.attr("disabled") != null){
		return;
	}
	favLink.attr("disabled", "");	//一時的に使えないようにする
	var unit = getTweetUnitByChild(favLink);
	$.mobile.showPageLoadingMsg();
	//お気に入りへ追加
	api.createFavorites(unit.attr("timeline-id"), function(data){
		$.mobile.hidePageLoadingMsg();
		favLink.removeAttr("disabled");
		if(data.text != undefined){
			twiMsg.show(data.text + "をお気に入りに追加しました");
			favLink.removeAttr("status-fav");
			favLink.removeClass("ui-btn-active");
			favLink.attr('status-unfav','true');
			$("a[status-unfav=true] span span.ui-btn-text").text("お気に入りから削除");
			favLink.unbind('click', statusFavEvent);
			favLink.click(statusUnfavEvent);
		}else{
			twiMsg.show("お気に入りに追加に失敗しました");
		}
	});
}

var statusUnfavEvent = function(){
	var unfavLink = $(this);
	if(unfavLink.attr("disabled") != undefined || unfavLink.attr("disabled") != null){
		return;
	}
	unfavLink.attr("disabled", "");	//一時的に使えないようにする
	var unit = getTweetUnitByChild(unfavLink);
	$.mobile.showPageLoadingMsg();
	//お気に入りから削除
	api.destroyFavorites(unit.attr("timeline-id"), function(data){
		$.mobile.hidePageLoadingMsg();
		unfavLink.removeAttr("disabled");
		if(data.text != undefined){
			twiMsg.show(data.text + "をお気に入りから削除しました");
			unfavLink.removeAttr("status-unfav");
			unfavLink.removeClass("ui-btn-active");
			unfavLink.attr('status-fav','true');
			$("a[status-fav=true] span span.ui-btn-text").text("お気に入りへ追加");
			unfavLink.unbind('click', statusUnfavEvent);
			unfavLink.click(statusFavEvent);
		}else{
			twiMsg.show("お気に入りの削除に失敗しました");
		}
	});
}

var statusRtEvent = function(){
	var rtLink = $(this);
	if(rtLink.attr("disabled") != undefined || rtLink.attr("disabled") != null){
		return;
	}
	rtLink.attr("disabled", "");	//一時的に使えないようにする
	var unit = getTweetUnitByChild(rtLink);
	$.mobile.showPageLoadingMsg();
	//unitごとにtimeline-idつまりstatus_idを持っている
	api.retweetStatuses(unit.attr("timeline-id"), function(data){
		$.mobile.hidePageLoadingMsg();
		rtLink.removeAttr("disabled");
		if(data.retweeted_status != undefined){
			gUser.rtIds[data.retweeted_status.id_str] = data.id_str;
			twiMsg.show(data.retweeted_status.text + "をリツイートしました");
			rtLink.removeAttr("status-rt");
			rtLink.removeClass("ui-btn-active");
			rtLink.attr("status-unrt", "true");
			$("a[status-unrt=true] span span.ui-btn-text").text("リツイートの解除");
			rtLink.unbind('click', statusRtEvent);
			rtLink.click(statusUnRtEvent);
		}
	});
}

var statusUnRtEvent = function(){
	var unrtLink = $(this);
	if(unrtLink.attr("disabled") != undefined || unrtLink.attr("disabled") != null){
		return;
	}
	unrtLink.attr("disabled", "");	//一時的に使えないようにする
	var unit = getTweetUnitByChild(unrtLink);
	$.mobile.showPageLoadingMsg();
	//リツイートしたものを連想配列で持ってる
	if( gUser.rtIds[unit.attr("timeline-id")] != undefined){
		var tergetId = gUser.rtIds[unit.attr("timeline-id")];
		api.destroyStatuses(tergetId, function(data){
			$.mobile.hidePageLoadingMsg();
			unrtLink.removeAttr("disabled");
			if(data.retweeted_status.text != undefined){
				twiMsg.show(data.retweeted_status.text + "のリツイートを取消しました");
				unrtLink.removeAttr("status-unrt");
				unrtLink.removeClass("ui-btn-active");
				unrtLink.attr("status-rt", "true");
				$("a[status-rt=true] span span.ui-btn-text").text("リツイート");
				unrtLink.unbind('click', statusUnRtEvent);
				unrtLink.click(statusRtEvent);
			}
		});
	}else{
		$.mobile.hidePageLoadingMsg();
		twiMsg.show("ツイートを特定できませんでした");
	}
}

var removeEvent = function(){
	var rmLink = $(this);
	if(rmLink.attr("disabled") != undefined || rmLink.attr("disabled") != null){
		return;
	}
	rmLink.attr("disabled", "");	//一時的に使えないようにする
	var unit = getTweetUnitByChild(rmLink);
	$.mobile.showPageLoadingMsg();
	removeStatus(function(data){
		$.mobile.hidePageLoadingMsg();
		rmLink.removeAttr("disabled");
		$("a.rm-link").removeClass("ui-btn-active");
		$("div .tweet_unit[timeline-id=" + data.id_str + "]").remove();
		$.mobile.changePage("#tweet-page");
		twiMsg.show(data.text + "ツイートを削除しました");
	},null,unit.attr("timeline-id"));
}
